package handler

import (
	"ehsm_kms/api"
	"github.com/gin-gonic/gin"
)

func (h *Handler) listKey(ctx *gin.Context) {
	req := new(Req)
	if err := ctx.Bind(req); err != nil {
		api.HandleError(ctx, 400, err, nil)
		ctx.Abort()
		return
	}

	docs, err := h.cmkRep.List(ctx, req.Appid)
	if err != nil {
		api.HandleError(ctx, 400, err, nil)
		ctx.Abort()
		return
	}

	api.HandleSuccess(ctx, gin.H{"list": docs})
}
func (h *Handler) deleteKey(ctx *gin.Context) {
	req := struct {
		Req
		Payload struct {
			KeyId string `json:"key_id" binding:"required"`
		} `json:"payload"`
	}{}
	if err := ctx.Bind(&req); err != nil {
		api.HandleError(ctx, 400, err, nil)
		ctx.Abort()
		return
	}

	err := h.cmkRep.RemoveByKeyId(ctx, req.Appid, req.Payload.KeyId)
	if err != nil {
		api.HandleError(ctx, 400, err, nil)
		ctx.Abort()
		return
	}
	api.HandleSuccess(ctx, nil)
}
func (h *Handler) deleteAllKey(ctx *gin.Context) {
	req := Req{}
	if err := ctx.Bind(&req); err != nil {
		api.HandleError(ctx, 400, err, nil)
		ctx.Abort()
		return
	}

	err := h.cmkRep.RemoveAll(ctx, req.Appid)
	if err != nil {
		api.HandleError(ctx, 400, err, nil)
		ctx.Abort()
		return
	}
	api.HandleSuccess(ctx, nil)
}

func (h *Handler) enableKey(ctx *gin.Context) {
	req := struct {
		Req
		Payload struct {
			KeyId string `json:"key_id" binding:"required"`
		} `json:"payload"`
	}{}
	if err := ctx.Bind(&req); err != nil {
		api.HandleError(ctx, 400, err, nil)
		ctx.Abort()
		return
	}

	err := h.cmkRep.EnableKey(ctx, req.Appid, req.Payload.KeyId)
	if err != nil {
		api.HandleError(ctx, 400, err, nil)
		ctx.Abort()
		return
	}
	api.HandleSuccess(ctx, nil)
}
func (h *Handler) disableKey(ctx *gin.Context) {

	req := struct {
		Req
		Payload struct {
			KeyId string `json:"key_id" binding:"required"`
		} `json:"payload"`
	}{}
	if err := ctx.Bind(&req); err != nil {
		api.HandleError(ctx, 400, err, nil)
		ctx.Abort()
		return
	}

	err := h.cmkRep.DisableKey(ctx, req.Appid, req.Payload.KeyId)
	if err != nil {
		api.HandleError(ctx, 400, err, nil)
		ctx.Abort()
		return
	}
	api.HandleSuccess(ctx, nil)
}
